package com.hd.manager.controller;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.hd.appcommon.entity.Card;
import com.hd.appcommon.service.HttpService;
import com.hd.hdxgddcommon.utils.StringUtils;
import com.hd.manager.util.ParamUtils;
import com.hd.manager.webSocket.DeviceEndpoint;
import com.hd.manager.webSocket.EndpointManager;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import okhttp3.MediaType;
import okhttp3.RequestBody;
import okhttp3.ResponseBody;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import retrofit2.Call;
import retrofit2.Response;
import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;

import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Date;
import java.util.Iterator;
import java.util.TreeMap;

import org.springframework.web.bind.annotation.RequestMapping;

import static com.hd.manager.config.Constant.*;
import static com.hd.manager.util.RequestIdUtil.getRequestId;


/**
 * @projectName: WebSocket
 * @package: com.Controller
 * @className: ActivateUserController
 * @author: 习
 * @description: TODO
 * @date: 2023/7/22 11:57
 * @version: 1.0
 */
@RequestMapping("/user")
@RestController
@Slf4j
public class TestController {
    Retrofit retrofit = new Retrofit.Builder()
            //.baseUrl("http://172.18.52.13/")
            .baseUrl("http://47.114.170.66/")
            .addConverterFactory(GsonConverterFactory.create())
            .build();

    String accessKeySecret = AccessKeySecret;
    String accessKeyId = AccessKeyID;

//    /**
//     * 获取人员特征信息
//     * @param peopleCode
//     */
//    @RequestMapping("getUserFaceCharacter")
//    public String getUserFaceCharacter(String peopleCode) {
//        Long characteristicType = 1L;
//        String requestId = String.valueOf(getRequestId());
//        String accessKeyId = AccessKeyID;
//
//        java.text.SimpleDateFormat df = new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//        df.setTimeZone(new java.util.SimpleTimeZone(0, "UTC"));// 这里一定要设置UTC时区
//
//        Date date = new Date();
//
//        String timestamp = df.format(date);
//
//        // 尝试测试获取部门信息接口
//        // 比如现在需要查询部门编号为001的部门
//        //String departmentCode = "001";
//
//        TreeMap<String, String> sortedSignParams = new TreeMap<>();
//        sortedSignParams.put("zhangmen-request-id",requestId);
//        sortedSignParams.put("zhangmen-access-key-id",accessKeyId);
//        sortedSignParams.put("zhangmen-timestamp",timestamp);
//
//        sortedSignParams.put("peopleCode",peopleCode);
//        sortedSignParams.put("characteristicType", String.valueOf(characteristicType));
//
//        // 签名生成开始 （签名生成部分第三方可参照这部分代码）
//        StringBuilder stringToSign = new StringBuilder();
//        stringToSign.append("GET").append("&");
//
//        String signature = "";
//        Iterator<String> it = sortedSignParams.keySet().iterator();
//        StringBuilder sortStringTmp = new StringBuilder();
//        try {
//            while (it.hasNext()) {
//                String key = it.next();
//                sortStringTmp.append("&").append(ParamUtils.specialUrlEncode(key)).append("=").append(ParamUtils.specialUrlEncode(sortedSignParams.get(key)));
//            }
//            // 去除第一个多余的&符号
//            String sortedQueryString = sortStringTmp.substring(1);
//            stringToSign.append(ParamUtils.specialUrlEncode("/")).append("&");
//            stringToSign.append(ParamUtils.specialUrlEncode(sortedQueryString));
//            signature = ParamUtils.sign(accessKeySecret + "&", stringToSign.toString());
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//        // 签名生成结束
//
//        System.out.println("*********sign************:"+signature);
//        System.out.println("timestamp:"+timestamp);
//        System.out.println("request-id:"+requestId);
//        System.out.println("access-key-id:"+accessKeyId);
//        HttpService httpService = retrofit.create(HttpService.class);
//        // 调用获取部门信息接口
//        Call<ResponseBody> responseBodyCall = httpService.getFaceCharacter(signature,requestId,accessKeyId,timestamp,
//                peopleCode,characteristicType);
//        try {
//            Response<ResponseBody> responseBodyResponse = responseBodyCall.execute();
//            String faceCode = null;
//            if(responseBodyResponse.code() == 200){
//                // 调用成功
//                System.out.println("成功");
//                JSONObject jsonObject = JSONObject.parseObject(responseBodyResponse.body().string());
//                JSONObject data = jsonObject.getJSONObject("data");
//                JSONArray jsonArray = data.getJSONArray("list");
//                Object jsonObject1 = jsonArray.get(0);
//                JSONObject list0 = JSONObject.parseObject(jsonObject1.toString());
//                faceCode = list0.getString("characteristicCode");
//            } else{
//                // 调用失败
//                System.out.println(responseBodyResponse.errorBody().string());
//            }
//            return faceCode;
//        } catch (IOException e) {
//            e.printStackTrace();
//            return null;
//        }
//
//    }
//    @RequestMapping("openCardRightAdd")
//    public boolean openCardRightAdd(@RequestParam(value = "doorCode") String doorCode,
//                                    @RequestParam(value = "cardNumber") Long cardNumber,
//                                    @RequestParam(value = "startDate",required = false) String startDate,
//                                    @RequestParam(value = "endDate",required = false) String endDate,
//                                    @RequestParam(value = "startTime", required = false) String startTime,
//                                    @RequestParam(value = "endTime", required = false) String endTime,
//                                    @RequestParam(value = "weekOption",required = false)String weekOption) {
//        Byte timeType;
//        if(StringUtils.isNotBlank(weekOption)&&!weekOption.equals("1111111")){
//            //间隔时间段
//            timeType = 1;
//        }else if(StringUtils.isNotBlank(startTime)&&StringUtils.isNotBlank(endTime)){
//            //间隔时间段
//            timeType = 1;
//        }else if(StringUtils.isNotBlank(startDate)&&StringUtils.isNotBlank(endDate)){
//            //连续时间段
//            timeType = 0;
//        }else{
////            无时间限制
//            timeType = 2;
//        }
//
//
//        String operatorCode = ZhengYuanLockAdmin;
//        // 测试远程开门接口
//        String requestId = String.valueOf(getRequestId());
//
//        java.text.SimpleDateFormat df = new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//        df.setTimeZone(new java.util.SimpleTimeZone(0, "GMT"));// 这里一定要设置GMT时区
//
//        Date date = new Date();
//
//        String timestamp = df.format(date);
//
//        TreeMap<String, String> sortedSignParams = new TreeMap<>();
//        sortedSignParams.put("zhangmen-request-id",requestId);
//        sortedSignParams.put("zhangmen-access-key-id",accessKeyId);
//        sortedSignParams.put("zhangmen-timestamp",timestamp);
//
//        // 远程开门参数封装
////        DoorOpenDTO doorOpenDTO = new DoorOpenDTO();
////        doorOpenDTO.setDoorCode("202"); // 门点编号
////        doorOpenDTO.setOperatorCode("shjd");// 操作员账号
////        doorOpenDTO.setOperatorType(2);// 操作员类型
////
//        StringBuilder stringToSign = new StringBuilder();
//        stringToSign.append("POST").append("&");
//
//        Card card = new Card();
//        card.setDoorCode(doorCode);
//        card.setOperatorCode(operatorCode);
//        card.setCardNumber(cardNumber);
//        card.setTimeType(timeType);
//        if(timeType.equals(0)){
//            card.setStartDate(startDate);
//            card.setEndDate(endDate);
//        }
//        else if(timeType.equals(1)){
//            if(StringUtils.isNotBlank(startTime)&&StringUtils.isNotBlank(endTime)){
//                card.setStartTime(startTime);
//                card.setEndTime(endTime);
//            }
//            if(StringUtils.isNotBlank(weekOption)){
//                card.setWeekOption(weekOption);
//            }
//        }
//
//        String objectString = JSONObject.toJSONString(card);
//        sortedSignParams.put("requestBody", objectString);
//        System.out.println(objectString);
//        String signature = "";
//        Iterator<String> it = sortedSignParams.keySet().iterator();
//        StringBuilder sortStringTmp = new StringBuilder();
//        try {
//            while (it.hasNext()) {
//                String key = it.next();
//                sortStringTmp.append("&").append(ParamUtils.specialUrlEncode(key)).append("=").append(ParamUtils.specialUrlEncode(sortedSignParams.get(key)));
//            }
//            // 去除第一个多余的&符号
//            System.out.println(stringToSign);
//            System.out.println(sortStringTmp);
//            String sortedQueryString = sortStringTmp.substring(1);
//            stringToSign.append(ParamUtils.specialUrlEncode("/")).append("&");
//            stringToSign.append(ParamUtils.specialUrlEncode(sortedQueryString));
//            System.out.println(stringToSign);
//            signature = ParamUtils.sign(accessKeySecret + "&", stringToSign.toString());
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//
//        System.out.println(requestId);
//        System.out.println(accessKeyId);
//        System.out.println("signature="+signature);
//        HttpService httpService = retrofit.create(HttpService.class);
//        Call<ResponseBody> responseBodyCall = httpService.openCardRightAdd(signature,requestId,accessKeyId,timestamp, RequestBody.create(MediaType.parse("application/json; charset=utf-8"),objectString));
//        try {
//            Response<ResponseBody> responseBodyResponse = responseBodyCall.execute();
//            System.out.println(responseBodyResponse.headers());
//            JSONObject jsonObjectBody = JSONObject.parseObject(responseBodyResponse.body().string());
//            Integer code = Integer.valueOf(jsonObjectBody.getString("code"));
//            if(code.equals(200)){
//                System.out.println("------success------");
//                System.out.println(jsonObjectBody.toJSONString());
//                return true;
//            } else{
//                System.out.println("------failed------");
//                System.out.println("code："+responseBodyResponse.code());
//                System.out.println(jsonObjectBody.toJSONString());
//                return false;
//            }
//        } catch (IOException e) {
//            e.printStackTrace();
//            return false;
//        }
//
//    }
//    @RequestMapping("openCardRightDelete")
//    public boolean openCardRightDelete(@RequestParam(value = "doorCode") String doorCode,
//                                    @RequestParam(value = "cardNumber") Long cardNumber) {
//
//
//        String operatorCode = ZhengYuanLockAdmin;
//        // 测试远程开门接口
//        String requestId = String.valueOf(getRequestId());
//
//        java.text.SimpleDateFormat df = new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//        df.setTimeZone(new java.util.SimpleTimeZone(0, "GMT"));// 这里一定要设置GMT时区
//
//        Date date = new Date();
//
//        String timestamp = df.format(date);
//
//        TreeMap<String, String> sortedSignParams = new TreeMap<>();
//        sortedSignParams.put("zhangmen-request-id",requestId);
//        sortedSignParams.put("zhangmen-access-key-id",accessKeyId);
//        sortedSignParams.put("zhangmen-timestamp",timestamp);
//
//        // 远程开门参数封装
////        DoorOpenDTO doorOpenDTO = new DoorOpenDTO();
////        doorOpenDTO.setDoorCode("202"); // 门点编号
////        doorOpenDTO.setOperatorCode("shjd");// 操作员账号
////        doorOpenDTO.setOperatorType(2);// 操作员类型
////
//        StringBuilder stringToSign = new StringBuilder();
//        stringToSign.append("DELETE").append("&");
//
//        Card card = new Card();
//        card.setDoorCode(doorCode);
//        card.setOperatorCode(operatorCode);
//        card.setCardNumber(cardNumber);
//
//        String objectString = JSONObject.toJSONString(card);
//        sortedSignParams.put("requestBody", objectString);
//        System.out.println(objectString);
//        String signature = "";
//        Iterator<String> it = sortedSignParams.keySet().iterator();
//        StringBuilder sortStringTmp = new StringBuilder();
//        try {
//            while (it.hasNext()) {
//                String key = it.next();
//                sortStringTmp.append("&").append(ParamUtils.specialUrlEncode(key)).append("=").append(ParamUtils.specialUrlEncode(sortedSignParams.get(key)));
//            }
//            // 去除第一个多余的&符号
//            System.out.println(stringToSign);
//            System.out.println(sortStringTmp);
//            String sortedQueryString = sortStringTmp.substring(1);
//            stringToSign.append(ParamUtils.specialUrlEncode("/")).append("&");
//            stringToSign.append(ParamUtils.specialUrlEncode(sortedQueryString));
//            System.out.println(stringToSign);
//            signature = ParamUtils.sign(accessKeySecret + "&", stringToSign.toString());
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//
//        System.out.println(requestId);
//        System.out.println(accessKeyId);
//        System.out.println("signature="+signature);
//        log.info("requestId: " +requestId);
//        log.info("timeStamp: "+timestamp);
//        System.out.println(timestamp);
//        HttpService httpService = retrofit.create(HttpService.class);
//        Call<ResponseBody> responseBodyCall = httpService.openCardRightDelete(signature,requestId,accessKeyId,timestamp, RequestBody.create(MediaType.parse("application/json; charset=utf-8"),objectString));
//        try {
//            Response<ResponseBody> responseBodyResponse = responseBodyCall.execute();
//            System.out.println(responseBodyResponse);
//            JSONObject jsonObjectBody = JSONObject.parseObject((responseBodyResponse).body().string());
//            Integer code = Integer.valueOf(jsonObjectBody.getString("code"));
//            if(code.equals(200)){
//                System.out.println("------success------");
//                System.out.println(jsonObjectBody.toJSONString());
//                return true;
//            } else{
//                System.out.println("------failed------");
//                System.out.println("code："+responseBodyResponse.code());
//                System.out.println(jsonObjectBody.toJSONString());
//                return false;
//            }
//        } catch (IOException e) {
//            e.printStackTrace();
//            return false;
//        }
//
//    }

}
